/**
 * 联系表单消息控制器
 * @module controllers/messageController
 */

const { Message } = require('../models');

/**
 * 提交联系表单
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @returns {Object} 响应对象
 */
const submitMessage = async (req, res) => {
  try {
    const { name, email, subject, content } = req.body;
    
    // 验证请求体
    if (!name || !email || !subject || !content) {
      return res.status(400).json({ message: '姓名、邮箱、主题和内容不能为空' });
    }
    
    // 创建消息
    const message = await Message.create({
      name,
      email,
      subject,
      content,
      read: false
    });
    
    return res.status(201).json({ 
      message: '消息发送成功',
      id: message.id
    });
  } catch (error) {
    console.error('提交联系表单错误:', error);
    return res.status(500).json({ message: '服务器错误' });
  }
};

/**
 * 获取所有消息(管理员)
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @returns {Object} 响应对象
 */
const getAllMessages = async (req, res) => {
  try {
    const { read } = req.query;
    
    // 构建查询条件
    const where = {};
    if (read !== undefined) {
      where.read = read === 'true';
    }
    
    // 查询消息
    const messages = await Message.findAll({
      where,
      order: [['createdAt', 'DESC']]
    });
    
    return res.status(200).json({ messages });
  } catch (error) {
    console.error('获取消息列表错误:', error);
    return res.status(500).json({ message: '服务器错误' });
  }
};

/**
 * 获取单个消息
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @returns {Object} 响应对象
 */
const getMessageById = async (req, res) => {
  try {
    const { id } = req.params;
    
    // 查找消息
    const message = await Message.findByPk(id);
    if (!message) {
      return res.status(404).json({ message: '消息不存在' });
    }
    
    return res.status(200).json({ message });
  } catch (error) {
    console.error('获取消息详情错误:', error);
    return res.status(500).json({ message: '服务器错误' });
  }
};

/**
 * 标记消息为已读
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @returns {Object} 响应对象
 */
const markAsRead = async (req, res) => {
  try {
    const { id } = req.params;
    
    // 查找消息
    const message = await Message.findByPk(id);
    if (!message) {
      return res.status(404).json({ message: '消息不存在' });
    }
    
    // 更新消息
    await message.update({ read: true });
    
    return res.status(200).json({ 
      message: '消息已标记为已读'
    });
  } catch (error) {
    console.error('标记消息已读错误:', error);
    return res.status(500).json({ message: '服务器错误' });
  }
};

/**
 * 删除消息
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @returns {Object} 响应对象
 */
const deleteMessage = async (req, res) => {
  try {
    const { id } = req.params;
    
    // 查找消息
    const message = await Message.findByPk(id);
    if (!message) {
      return res.status(404).json({ message: '消息不存在' });
    }
    
    // 删除消息
    await message.destroy();
    
    return res.status(200).json({ message: '消息删除成功' });
  } catch (error) {
    console.error('删除消息错误:', error);
    return res.status(500).json({ message: '服务器错误' });
  }
};

module.exports = {
  submitMessage,
  getAllMessages,
  getMessageById,
  markAsRead,
  deleteMessage
}; 